import { build, type Plugin } from "vite";
import fs from "node:fs"
import * as ElectronBuilder from "electron-builder"
import path from "path"
const buildBackGround = ()=>{
    // vite的开发环境是用esbuild 打包环境使用rollup
    // 这里可以直接require到esbuild

    // 这里我换成了使用import
    require("esbuild").buildSync({
        // 入口
        entryPoints: ["src/background.ts"],
        // 是否打包依赖
        bundle: true,
        // 导出文件
        outfile: "dist/background.js",
        platform: "node",
        // 版本 这里不重要
        target: "node12",
        // electron不用打进去
        external: ["electron"]
    })    
}

export const ElectronBuildPlugin = ():Plugin =>{
    return {
        name: "electron-build",
        // 使用这个钩子，等到vite打包完，这时才有index.html文件
        closeBundle () {
            // 有时候没有run dev 直接build。所以这里也需要调用一遍ts转js
            buildBackGround()
            const json = JSON.parse(fs.readFileSync("package.json", "utf-8"))
            json.main = "background.js"
            fs.writeFileSync("dist/package.json", JSON.stringify(json))

            // electron-builder 的 bug 垃圾文件下载 为了处理在dist里手动创建一个node_modules文件夹
            fs.mkdirSync("dist/node_modules")

            ElectronBuilder.build({
                config: {
                    directories: {
                        output: path.resolve(process.cwd(), "release"),
                        app: path.resolve(process.cwd(), "dist")
                    },
                    // 打包成一个压缩包
                    asar:true,
                    appId: "com.example.app",
                    productName: "vite-electron",
                    nsis: {
                        // 取消一键安装
                        oneClick: false,
                        // 允许修改安装目录
                        allowToChangeInstallationDirectory: true,
                    }
                }
            })
        }
    }
}